From: Keir Fraser Date: Tue, 21 Oct 2008 09:04:40 +0000 (+0100) Subject: pv-on-hvm: Avoid rwlock livelock on save/restore. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14066^2~8 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=d24bdba9b96d862afc0a5c26d8e46a13c37bf4b7;p=xen.git pv-on-hvm: Avoid rwlock livelock on save/restore. Signed-off-by: Keir Fraser --- diff --git a/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c b/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c index 92b64e2589..08bf645ef7 100644 --- a/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c +++ b/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c @@ -11,12 +11,6 @@ struct ap_suspend_info { atomic_t nr_spinning; }; -/* - * Use a rwlock to protect the hypercall page from being executed in AP context - * while the BSP is re-initializing it after restore. - */ -static DEFINE_RWLOCK(suspend_lock); - #ifdef CONFIG_SMP /* @@ -33,12 +27,8 @@ static void ap_suspend(void *_info) atomic_inc(&info->nr_spinning); mb(); - while (info->do_spin) { + while (info->do_spin) cpu_relax(); - read_lock(&suspend_lock); - HYPERVISOR_yield(); - read_unlock(&suspend_lock); - } mb(); atomic_dec(&info->nr_spinning); @@ -61,9 +51,7 @@ static int bp_suspend(void) suspend_cancelled = HYPERVISOR_suspend(0); if (!suspend_cancelled) { - write_lock(&suspend_lock); platform_pci_resume(); - write_unlock(&suspend_lock); gnttab_resume(); irq_resume(); }